﻿<%@ WebHandler Language="C#" Class="MyGravatar" %>

using System;
using System.Web;
using System.Data;
using System.Data.Common;
using System.Web.SessionState;
using System.Globalization;
using System.Collections;
using System.IO;


public class MyGravatar : IHttpHandler, IRequiresSessionState
{
    /// <summary>
    /// 多文件上传时使用的统计器
    /// </summary>
    public static int MyCounter = 0;
    /// <summary>
    /// 判断文件上传是否成功
    /// </summary>
    public static bool IsState = false;
    public int User_Key;
    public DateTime ThisTime;


    public void ProcessRequest(HttpContext context)
    {

        /* 当前操作的管理员ID号 */
        int admin_id = Admins.IsLogin();
        /* 验证是否登陆有效 */
        if (admin_id < 1)
            Utils.ShowEnd(context, -2);

        /* 外部文件处接受 */
        HttpPostedFile file = context.Request.Files["FileData"];

        /* 外部数据接受 */
        int Item_Typ = Convert.ToInt32(context.Request.Params["Item_Typ"]); /* 1图片，2RAR ，3视频 */
        string Folder = context.Request.Params["Folder"];
        string item_file_typ = Utils.GetParams("File_Typ", "image");
        int Cat_Width = Convert.ToInt32(context.Request.Params["Cat_Width"]);
        int Cat_Height = Convert.ToInt32(context.Request.Params["Cat_Height"]);
        string Cat_Mode = context.Request.Params["Cat_Mode"];
        int Obj_Typ = Convert.ToInt32(context.Request.Params["Obj_Typ"]);
        DateTime Item_Time = Convert.ToDateTime(context.Request.Params["Item_Time"]);

        /* 完整性验证 */
        if (Obj_Typ < 0 || Obj_Typ > 255)
            Utils.ShowEnd(context, -1);
        if (Item_Typ < 1 || Item_Typ > 1688)
            Utils.ShowEnd(context, -1);
        if (Folder.Length < 1)
            Utils.ShowEnd(context, -1);


        /* 文件处理 */
        String fileExt = Path.GetExtension(file.FileName).ToLower();
        //定义允许上传的文件扩展名
        Hashtable extTable = new Hashtable();
        extTable.Add("image", "jpg,png,jpeg,gif,svg");
        extTable.Add("video", "mp4");
        
        /* 可生成缩略图的图片扩展名 */
        string thumbnail_fileExt_list="jpg,png,jpeg,gif";


        String dirName = item_file_typ;

        //最大文件大小
        int maxSize = 5242880;
        switch (item_file_typ)
        {
            case "image": maxSize = Utils.ToUnitBit(1, "mb"); break;
            case "video": maxSize = Utils.ToUnitBit(50, "mb"); break;
            default: break;
        }

        /* 验证:扩建名白名单 */
        if (!extTable.ContainsKey(dirName))
        {
            Utils.ShowEnd(context, "文件类型不允许上传");
        }

        //验证：文件大小和InputStream值
        if (file.InputStream == null || file.InputStream.Length > maxSize)
        {
            Utils.ShowEnd(context, "上传文件大小超过限制。");
        }

        /* 验证：判断扩建名是否允许上传 */
        if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(','), fileExt.Substring(1).ToLower()) == -1)
        {
            Utils.ShowEnd(context, "上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。");
        }
        /* 存储路径 */
        string FileFolder = "../DataFile/" + Folder + "/" + Item_Time.ToString("yyyyMM") + "/" + Item_Time.ToString("ddHHmmss") + Utils.GetFileExtName(file.FileName);
        if (file != null)
        {
            /* 文件夹是否存在 */
            if (!Directory.Exists("../DataFile/" + Folder + "/" + Item_Time.ToString("yyyyMM")))
            {
                Directory.CreateDirectory(context.Server.MapPath("../DataFile/" + Folder + "/" + Item_Time.ToString("yyyyMM")));
            }
            /* 文件保存到服务器 */
            file.SaveAs(context.Server.MapPath(FileFolder));
            if (Item_Typ == 1)
            {
                if (thumbnail_fileExt_list.IndexOf(fileExt.Substring(1)) >= 0)
                {
                    /* 后台专业的图像 */
                    Thumbnail.MakeThumbnail(context.Server.MapPath(FileFolder), context.Server.MapPath(FileFolder.Replace(fileExt, "__p_p_p_p" + fileExt)), 90, 60, "Cut", 95);
                    Thumbnail.MakeThumbnail(context.Server.MapPath(FileFolder), context.Server.MapPath(FileFolder.Replace(fileExt, "__p_p_p_p_p" + fileExt)), 90, 120, "Cut", 95);
                }
                else
                    File.Copy(context.Server.MapPath(FileFolder), context.Server.MapPath(FileFolder.Replace(fileExt, "_ssss" + fileExt)));
            }
        }
        else
            Utils.ShowEnd(context, "文件是空的");



    }
    public bool IsReusable { get { return false; } }
}